package ar.com.arkios.kfconTraductor;

import java.io.DataInputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.Socket;
import org.apache.log4j.Logger;

/**
 * 
 */
public class Protocolo {

    private static final Logger miLogger = Logger.getLogger(Protocolo.class);
    
    public String read(Socket socket) {
        try {
            return read(new DataInputStream(socket.getInputStream()));
        } catch (IOException e) {
            miLogger.error("No se pudo crear un DataInputStream a partir del socket indicado.");
            throw new RuntimeException(e);
        }
    }
    
    public String read(DataInputStream input) {
        // TODO: leer los datos del input según el protocolo propuesto.
        StringBuffer buffer = new StringBuffer();
        
        try {
            while(true){
                if (input.available() > 1) {
                    int tamanio = input.readShort();
                    byte[] buff = new byte[tamanio];
                    
                    for(int leido = 0; leido < tamanio;){
                        int aLeer = tamanio - leido;
                        leido += input.read(buff, leido, aLeer);
                    }
                    
                    buffer.append(new String(buff));
                    break;
                }
                else
                    Thread.sleep(200);
            }
            
            return buffer.toString();
        } catch (IOException e) {
            miLogger.error("Error al intentar leer información trasmitida a través del socket.");
            throw new RuntimeException(e);
        } catch (InterruptedException e) {
            miLogger.error("No se pudo frenar la lectura del socket.");
            throw new RuntimeException(e);
        }
    }
    
}
